package main

import (
	"fmt"
  "gocode/customerManage/service"
  "gocode/customerManage/model"
)

type customerView struct {
  // 定义必要字段
  key string //接受用户输入
	loop bool //表示是否循环显示菜单
	// 增加一个字段customerSereice
	customerService *service.CustomerService

}

// 得到用户输入信息，构建新的用户并完成添加
func (this *customerView) addCustomer() { 
	fmt.Println("------添加客户-------")
	fmt.Println("姓名：")
	name := ""
	fmt.Scanln(&name)
	fmt.Println("性别：")
	gender := ""
	fmt.Scanln(&gender)
	fmt.Println("年龄：")
	age := 0
	fmt.Scanln(&age)
	fmt.Println("电话：")
	phone := ""
	fmt.Scanln(&phone)
	fmt.Println("邮箱：")
	email := ""
	fmt.Scanln(&email)

	// 构建一个新的Customer实例
  customer := model.NewNoIdCustomer(name,gender,age,phone,email)
	this.customerService.Add(customer)
	fmt.Println("------添加客户完成！------")
}

// 修改客户
func (this *customerView) update() {
	fmt.Println("------修改客户-------")
	fmt.Println("请选择待修改客户编号(-1退出)：")
  id := -1
	fmt.Scanln(&id)
	if id == -1 {
		return //放弃修改
	}
	if this.customerService.Delete(id) {
		fmt.Println("姓名：")
		name := ""
		fmt.Scanln(&name)
		fmt.Println("性别：")
		gender := ""
		fmt.Scanln(&gender)
		fmt.Println("年龄：")
		age := 0
		fmt.Scanln(&age)
		fmt.Println("电话：")
		phone := ""
		fmt.Scanln(&phone)
		fmt.Println("邮箱：")
		email := ""
		fmt.Scanln(&email)
		fmt.Println("确认修改请输入(Y/N):")
		choice := ""
		fmt.Scanln(&choice)
		if choice == "y" || choice == "Y" {
				// 构建一个新的Customer实例
		    customer := model.NewCustomer(id,name,gender,age,phone,email)	
				this.customerService.Update(customer)
				fmt.Println("----您已经完成修改！------")
		}
	
	}else {
			fmt.Println("------输入的id不存在！-------")
	}

}

// 删除客户
func (this *customerView) delete() {
	fmt.Println("------删除客户-------")
	fmt.Println("请选择待删除客户编号(-1退出)：")
  id := -1
	fmt.Scanln(&id)
	if id == -1 {
		return //放弃删除
	}

	fmt.Println("确认删除请输入(Y/N):")
	choice := ""
	fmt.Scanln(&choice)
	if choice == "y" || choice == "Y" {
		// 调用CustomerService的Delete方法
		if this.customerService.Delete(id) {
			fmt.Println("------删除完成！-------")
		}else {
			fmt.Println("------删除失败,输入的id不存在！-------")
		}
	}
}

// 显示所有的客户信息
func (this *customerView) list() {
	// 首先获取到当前所有客户信息,在切片中
  customers := this.customerService.List()
	// 显示
	fmt.Println("------客户列表-------")
	fmt.Println("编号\t姓名\t性别\t年龄\t电话\t\t邮箱")
	for _,v:=range customers {
		fmt.Println(v.GetInfo())
	}
	fmt.Println("\n------客户列表完成-------\n\n")
}

// 退出软件
func (this *customerView) exit() {
  choice := ""
	fmt.Println("确认退出请输入(Y/N):")
	for {
		fmt.Scanln(&choice)
		if (choice == "y" || choice == "Y" || choice == "n" || choice == "N") {
			break
		}
		fmt.Println("你输入有误，请重新输入y/n")
	}
	if choice == "y" || choice == "Y" {this.loop = false}
}
// 显示主菜单
func (this *customerView) mainMenu() {
	for {
		fmt.Println("\n-------客户信息管理软件-------")
		fmt.Println("1 添加客户")
		fmt.Println("2 修改客户")
		fmt.Println("3 删除客户")
		fmt.Println("4 客户列表")
		fmt.Println("5 退出软件")
		fmt.Print("请选择 1-5:")

		fmt.Scanln(&this.key)
		switch this.key {
		case "1":
			this.addCustomer()
		case "2":
			this.update()
		case "3":
			this.delete()
		case "4":
			this.list()
		case "5":
			this.exit()
		default :
		  fmt.Println("输入错误,请重新输入 (1-5)")
		}
		if !this.loop {					
			break
		}
	}
	fmt.Println("你退出了系统...")
}

func main() {
	// 在main函数中创建实例并运行主菜单
	customerView := customerView {
		key : "",
		loop : true,
	}
	customerView.customerService = service.NewCustomerService()
	// 完成对customerView结构体customerSereice字段的初始化
	// 显示主菜单
	customerView.mainMenu()
}